
// 这个模块提供的parse()函数，可以将查询字符串，解析成对象的格式
const qs = require('querystring')


const bodyParser=(req,res,next)=>{
        // 用于存储客户端发送过来的请求体
        let str = ''
        // 监听req的data时间
        // 在中间件中，需要监听req对象的data事件，来获取客户端发发送到服务器的数据
        // 如果数据量比较大，无法一次性发送完毕，则客户端会把数据切割后，分批发送到服务器。所以data事件可能会出发多次
        // 每一次触发data事件，都会获取完整数据的一部分，需要手动接收到的数据进行拼接
        req.on('data', (chunk) => {
            console.log('chunk', chunk);
            str += chunk
        })
        // 监听end事件
        // 请求体数据接受完毕后，会自动触发req的end事件
        req.on('end', () => {
            // 请求体数据 name=czk&age=20
            console.log('请求体数据', str)
            if (str) {
                const obj = qs.parse(str)
                // obj==== {name: 'czk', age: '20'} 转为对象
                console.log('obj====', obj)
                // 挂载在body里面
                req.body=obj
            }
            // 数据组装完后，再进行放行
            next()
        })
        
}
module.exports={
    // 导出一个对象，需要调用该对象bodyParser
    // 例如 const bodyParser=require('./03-custom-body-parser')
    // 调用 bodyParser.bodyParser
    bodyParser
}
// 如果是这样导出，则直接调用parser
//module.exports=bodyParser
